package cn.eli.vue.controller;

import cn.eli.vue.api.CommonResult;
import cn.eli.vue.entity.PostAnswer;
import cn.eli.vue.entity.SubscribeAsk;
import cn.eli.vue.entity.PostAsk;
import cn.eli.vue.service.postAsk.PostAskService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author :lzs
 * @Date : 2021年7月16日
 * @Description : 问题业务控制器
 */

@Api("问题模块")
@ResponseBody
@RestController
public class PostAskBusinessController {
    @Autowired
    PostAskService postAskService;

    /*********************************          业务接口    ***********************************************/
    /**
     * 发布问题接口
     * 收取数据包：新发布的问题数据
     * 传回数据包：影响sql行数
     */
    @ApiOperation("发布问题")
    @RequestMapping(value = "/postask/askpost",method = {RequestMethod.POST})
    public CommonResult askPost(@RequestBody PostAsk postAsk){
        int user_id = postAsk.getUser_id();
        String postAsk_title = postAsk.getPostAsk_title();
        String postAsk_discribe = postAsk.getPostAsk_discribe();
        String postAsk_img = postAsk.getPostAsk_img();

        if(postAsk.getUser_id()==0){
            return CommonResult.validateFailed("无指定用户信息");
        }
        if(postAsk_title==null||postAsk_title.equals("")){
            return CommonResult.validateFailed("问题标题不可为空");
        }
        if(postAsk_discribe==null||postAsk_discribe.equals("")){
            return CommonResult.validateFailed("问题正文不可为空");
        }

        int postAsk_res = postAskService.AskPost(user_id,postAsk_title,postAsk_discribe,postAsk_img);
        if(postAsk_res != 0&&postAsk_res!=Integer.MIN_VALUE + 1001){
            return CommonResult.success("发布成功");
        }
        else{
            return CommonResult.validateFailed("发布失败");
        }
    }

    /**
     * 变更问题接口
     * 收取数据包：变更的问题数据
     * 传回数据包：影响sql行数
     */
    @ApiOperation("变更问题")
    @RequestMapping(value = "/postask/askmodify",method = {RequestMethod.POST,RequestMethod.GET})
    public CommonResult askModify(@RequestBody PostAsk postAsk){
        int postAsk_id = postAsk.getPostAsk_id();
        String postAsk_title = postAsk.getPostAsk_title();
        String postAsk_discribe = postAsk.getPostAsk_discribe();
        String postAsk_img = postAsk.getPostAsk_img();

        if(postAsk_title==null||postAsk_title.equals("")){
            return CommonResult.validateFailed("问题标题不可为空");
        }
        if(postAsk_discribe==null||postAsk_discribe.equals("")){
            return CommonResult.validateFailed("问题正文不可为空");
        }

        int postAsk_res = postAskService.AskModify(postAsk_id,postAsk_title,postAsk_discribe,postAsk_img);
        if(postAsk_res != 0&&postAsk_res!=Integer.MIN_VALUE + 1001){
            return CommonResult.success("修改成功");
        }
        else{
            return CommonResult.validateFailed("修改失败");
        }
    }

    /**
     * 用户收藏问题接口
     * 收取数据包：AskSubscribe实体 收藏问题id与操作收藏用户id
     * 传回数据包：影响sql行数
     */
    @ApiOperation("收藏问题")
    @RequestMapping(value ="/postask/asksubscribe",method = {RequestMethod.POST,RequestMethod.GET})
    public CommonResult askSubscribe(@RequestBody SubscribeAsk subscribeAsk){
        int postAsk_id = subscribeAsk.getPostAsk_id();
        int user_id = subscribeAsk.getUser_id();

        /*插入记录*/
        int subscribeAskInsert_res = postAskService.AskSubscribeInsert(user_id,postAsk_id);
        /*问题的收藏数+1*/
        int subscribeAskUpdate_res = postAskService.AskSubscribeUpdate(user_id,postAsk_id);

        if(subscribeAskInsert_res!=0&&subscribeAskUpdate_res!=0){
            return CommonResult.success("收藏成功");
        }
        else {
            return CommonResult.validateFailed("收藏失败");
        }
    }

    /**
     * 用户取消收藏问题接口
     * 收取数据包：AskSubscribe实体 收藏问题id与操作收藏用户id
     * 传回数据包：影响sql行数
     */
    @ApiOperation("取消收藏问题")
    @RequestMapping(value ="/postask/asksubscribecancel",method = {RequestMethod.POST,RequestMethod.GET})
    public CommonResult askSubscribeCancel(@RequestBody SubscribeAsk subscribeAsk){
        int postAsk_id = subscribeAsk.getPostAsk_id();
        int user_id = subscribeAsk.getUser_id();

        /*插入记录*/
        int subscribeAskCancelDelete_res = postAskService.AskSubscribeCancelDelete(user_id,postAsk_id);
        /*问题的收藏数+1*/
        int subscribeAskCancelUpdate_res = postAskService.AskSubscribeCancelUpdate(user_id,postAsk_id);

        if(subscribeAskCancelDelete_res!=0&&subscribeAskCancelUpdate_res!=0){
            return CommonResult.success("取消收藏成功");
        }
        else {
            return CommonResult.validateFailed("取消收藏失败");
        }
    }

    /**
     * 调用所有问题接口
     * 收取数据包：
     * 传回数据包：所有问题
     */
    @ApiOperation("获取所有问题")
    @RequestMapping(value = "/postask/allask",method = {RequestMethod.POST,RequestMethod.GET})
    public CommonResult allAsk(){
        List<PostAsk> allAsk_res = postAskService.AllAsk();

        if(allAsk_res!=null){
            return CommonResult.success(allAsk_res,"获取成功");
        }
        else {
            return CommonResult.validateFailed("获取失败或暂无问题");
        }
    }

    /**
     * 调用该用户所有问题接口
     * 收取数据包：
     * 传回数据包：指定用户的所有问题
     */
    @ApiOperation("获取指定用户发布的所有问题")
    @RequestMapping(value = "/postask/allaskinuser",method = {RequestMethod.POST,RequestMethod.GET})
    public CommonResult allAskInUser(@RequestBody PostAsk postAsk){
        int user_id = postAsk.getUser_id();
        List<PostAsk> allAskInUser_res = postAskService.AllAskInUser(user_id);

        if(allAskInUser_res!=null){
            return CommonResult.success(allAskInUser_res,"获取用户的问题成功");
        }
        else{
            return CommonResult.success("用户无问题");
        }
    }
}
